package net.zjitc.tree;

public interface BinaryTree<E> {

    /**
     * 获得左子树
     * @param p
     * @return
     */
    public TreeNode<E> getLChild(TreeNode<E> p);

    /**
     * 获得右子树
     * @param p
     * @return
     */
    public TreeNode<E> getRChild(TreeNode<E> p);

    /**
     * 插入节点到左子树
     * @param var
     * @param p
     */
    public void insertL(E var, TreeNode<E> p);

    /**
     * 插入节点到右子树
     * @param var
     * @param p
     */
    public void insertR(E var, TreeNode<E> p);


    /**
     * 删除p的左子树
     * @param p
     */
    public void deleteL(TreeNode<E> p);


    /**
     * 删除p的右子树
     * @param p
     */
    public void deleteR(TreeNode<E> p);

    /**
     * 查找元素节点
     * @param root
     * @param var
     * @return
     */
    public TreeNode<E> search(TreeNode<E> root, E var);


    /**
     * 遍历二叉树
     * @param i 遍历的方式： 1：前序 2：中序 3：后序
     */
    void traverse( int i);

}
